// ino.module.Statement.8652.package package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.Statement.8652.import import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import de.dhbwstuttgart.bytecode.ClassFile; import de.dhbwstuttgart.bytecode.CodeAttribute; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.myexception.CTypeReconstructionException; import de.dhbwstuttgart.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.SCStatementException; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.Pair; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.Typeable; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import sun.reflect.generics.reflectiveObjects.NotImplementedException; // ino.class.Statement.26184.declaration public abstract class Statement extends SyntaxTreeNode implements IItemWithOffset, Typeable // ino.end // ino.class.Statement.26184.body { // ino.attribute.offset.26188.declaration protected int offset; // ino.end // ino.attribute.variableLength.26191.declaration private int variableLength; // ino.end protected Type type; // ino.method.Statement.26194.definition public Statement(int offset, int variableLength) // ino.end // ino.method.Statement.26194.body { this.offset=offset; this.variableLength=variableLength; } // ino.end // ino.method.getOffset.26197.definition public int getOffset() // ino.end // ino.method.getOffset.26197.body { return offset; } // ino.end // ino.method.getVariableLength.26200.definition public int getVariableLength() // ino.end // ino.method.getVariableLength.26200.body { return variableLength; } // ino.end // ino.method.codegen.26206.declaration public abstract void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) throws JVMCodeException; // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26224.declaration public abstract void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters); // ino.end /** * @author AI10023 - Andreas Stadelmeier * Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke * Jedes Statement wird im Zuge des Algorithmus durch die TYPEExpr-Funktion angesprochen. */ public abstract ConstraintsSet TYPEStmt(TypeAssumptions assumptions); public Type getType(){ return type; } /** * @author Andreas Stadelmeier, a10023 * Sollte von jedem Statement überschrieben werden. * Liefert Informationen zum Statment und dessen Typ. * @return */ public String getTypeInformation(){ return this.printJavaCode(new ResultSet(new Vector()))+" : "+type.toString(); } /** * @author AI10023 - Andreas Stadelmeier * Jedem Statement und jeder Expression wird im Zuge des Typinferenzalgorithmus eine Typvariable zugewiesen. * Daher müssen alle Statements und Expressions die Methoden setTypeVariable und getTypeVariable implementieren. */ public void setType(Type t) { this.type=t; } public abstract JavaCodeResult printJavaCode(ResultSet resultSet); @Override public String getDescription(){ return this.printJavaCode(new ResultSet(new Vector())).toString(); } public void setReturnType(Type t){ } public Type getReturnType(){ return new de.dhbwstuttgart.syntaxtree.type.Void(-1); } } // ino.end