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

127 lines
3.7 KiB
Java
Raw Normal View History

2013-10-18 11:33:46 +00:00
// ino.module.Receiver.8650.package
2014-09-02 08:33:54 +00:00
package de.dhbwstuttgart.syntaxtree.statement;
2013-10-18 11:33:46 +00:00
// ino.end
// ino.module.Receiver.8650.import
import java.util.Hashtable;
import de.dhbwstuttgart.typeinference.Menge;
2015-09-23 15:22:01 +00:00
import de.dhbwstuttgart.bytecode.ClassGenerator;
2014-10-09 10:01:16 +00:00
import de.dhbwstuttgart.logger.Logger;
2014-09-02 08:33:54 +00:00
import de.dhbwstuttgart.syntaxtree.Class;
2015-09-23 15:22:01 +00:00
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
2014-09-02 08:33:54 +00:00
import de.dhbwstuttgart.typeinference.JavaCodeResult;
import de.dhbwstuttgart.typeinference.ResultSet;
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
2015-09-23 15:22:01 +00:00
import de.dhbwstuttgart.typeinference.assumptions.ClassAssumption;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
2013-10-18 11:33:46 +00:00
// ino.class.Receiver.26123.declaration
public class Receiver
// ino.end
// ino.class.Receiver.26123.body
{
// ino.attribute.expr.26126.declaration
private Expr expr;
2015-09-23 15:22:01 +00:00
private TypeAssumptions typeAssumptions;
2013-10-18 11:33:46 +00:00
// ino.end
// ino.attribute.parserlog.26129.declaration
protected static Logger parserlog = Logger.getLogger("parser");
// ino.end
// ino.method.Receiver.26132.defdescription type=javadoc
/**
* Autor: ¯Â¿Â½rg ¯Â¿Â½uerle
2013-10-18 11:33:46 +00:00
* @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
2013-10-18 11:33:46 +00:00
* @return
*/
// ino.end
// ino.method.toString.26147.definition
public String toString()
// ino.end
// ino.method.toString.26147.body
{
return expr.toString();
}
// ino.end
2015-09-23 15:22:01 +00:00
/*
2015-08-27 14:36:19 +00:00
public void setClass(Class cl){
this.receiverClass = cl;
}
2015-09-23 15:22:01 +00:00
*/
2015-08-27 14:36:19 +00:00
public Class getReceiverClass(ClassGenerator cg, TypeinferenceResultSet rs){
2015-09-23 15:22:01 +00:00
de.dhbwstuttgart.syntaxtree.type.Type receiverType = this.get_Expr().getType();
if(receiverType instanceof TypePlaceholder){
receiverType = rs.getTypeOfPlaceholder((TypePlaceholder)receiverType);
2015-09-23 15:22:01 +00:00
}
if(!(receiverType instanceof RefType)){
throw new TypeinferenceException("Typ des Receivers nicht eindeutig",this.get_Expr());
}
ClassAssumption receiverClassAssumption = typeAssumptions.getClassAssumptionFor((RefType)receiverType);
2016-04-11 16:35:18 +00:00
if(receiverClassAssumption == null)
throw new TypeinferenceException("Die Klasse für den Typ "+receiverType+" ist nicht in den Assumptions vorhanden", receiverType);
2015-09-23 15:22:01 +00:00
de.dhbwstuttgart.syntaxtree.Class receiverCl = receiverClassAssumption.getAssumedClass();
return receiverCl;
2015-08-27 14:36:19 +00:00
}
2015-09-23 15:22:01 +00:00
/**
* Setzt die TypeAssumptions für diesen Receiver.
* Das ist notwendig für die Bytecodegenerierung
* @param ass
*/
public void setAssumptions(TypeAssumptions ass){
this.typeAssumptions = ass;
}
2013-10-18 11:33:46 +00:00
public JavaCodeResult printJavaCode(ResultSet resultSet) {
return new JavaCodeResult().attach(this.get_Expr().printJavaCode(resultSet));
}
}
// ino.end