JavaPatternMatching/src/de/dhbwstuttgart/syntaxtree/statement/Receiver.java

132 lines
3.6 KiB
Java
Executable File

// ino.module.Receiver.8650.package
package de.dhbwstuttgart.syntaxtree.statement;
// ino.end
// ino.module.Receiver.8650.import
import java.util.Hashtable;
import de.dhbwstuttgart.typeinference.Menge;
import de.dhbwstuttgart.bytecode.ClassGenerator;
import de.dhbwstuttgart.logger.Logger;
// ino.end
import de.dhbwstuttgart.myexception.SCStatementException;
import de.dhbwstuttgart.syntaxtree.Class;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import de.dhbwstuttgart.typeinference.JavaCodeResult;
import de.dhbwstuttgart.typeinference.ResultSet;
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
import de.dhbwstuttgart.typeinference.assumptions.ClassAssumption;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
// ino.class.Receiver.26123.declaration
public class Receiver
// ino.end
// ino.class.Receiver.26123.body
{
// ino.attribute.expr.26126.declaration
private Expr expr;
private TypeAssumptions typeAssumptions;
// ino.end
// ino.attribute.parserlog.26129.declaration
protected static Logger parserlog = Logger.getLogger("parser");
// ino.end
// ino.method.Receiver.26132.defdescription type=javadoc
/**
* Autor: J�rg B�uerle
* @param expr
*/
// ino.end
// ino.method.Receiver.26132.definition
public Receiver(Expr expr)
// ino.end
// ino.method.Receiver.26132.body
{
this.expr = expr;
}
// ino.end
// ino.method.get_Type.26138.definition
public String get_Type()
// ino.end
// ino.method.get_Type.26138.body
{
return expr.getTypeName();
}
// ino.end
// ino.method.set_Expr.26141.definition
public void set_Expr(Expr express)
// ino.end
// ino.method.set_Expr.26141.body
{
expr=express;
}
// ino.end
// ino.method.get_Expr.26144.definition
public Expr get_Expr()
// ino.end
// ino.method.get_Expr.26144.body
{
return expr;
}
// ino.end
// ino.method.toString.26147.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end
// ino.method.toString.26147.definition
public String toString()
// ino.end
// ino.method.toString.26147.body
{
return expr.toString();
}
// ino.end
/*
public void setClass(Class cl){
this.receiverClass = cl;
}
*/
public Class getReceiverClass(ClassGenerator cg, TypeinferenceResultSet rs){
de.dhbwstuttgart.syntaxtree.type.Type receiverType = this.get_Expr().getType();
if(receiverType instanceof TypePlaceholder){
receiverType = rs.getTypeOfPlaceholder((TypePlaceholder)receiverType);
}
if(!(receiverType instanceof RefType)){
throw new TypeinferenceException("Typ des Receivers nicht eindeutig",this.get_Expr());
}
ClassAssumption receiverClassAssumption = typeAssumptions.getClassAssumptionFor((RefType)receiverType);
de.dhbwstuttgart.syntaxtree.Class receiverCl = receiverClassAssumption.getAssumedClass();
return receiverCl;
}
/**
* Setzt die TypeAssumptions für diesen Receiver.
* Das ist notwendig für die Bytecodegenerierung
* @param ass
*/
public void setAssumptions(TypeAssumptions ass){
this.typeAssumptions = ass;
}
public JavaCodeResult printJavaCode(ResultSet resultSet) {
return new JavaCodeResult().attach(this.get_Expr().printJavaCode(resultSet));
}
}
// ino.end