diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java index 6cb761af..972adb7f 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Class.java +++ b/src/de/dhbwstuttgart/syntaxtree/Class.java @@ -27,6 +27,7 @@ import de.dhbwstuttgart.syntaxtree.modifier.Modifiers; import de.dhbwstuttgart.syntaxtree.statement.Block; import de.dhbwstuttgart.syntaxtree.statement.Expr; import de.dhbwstuttgart.syntaxtree.statement.Statement; +import de.dhbwstuttgart.syntaxtree.statement.SuperCall; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType; @@ -90,7 +91,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I //ByteCodeResult bc = new ByteCodeResult(); //_cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { }); - //_cg zurückgeben + //_cg zur�ckgeben //bc.append(BCELByteCodeOutput); //return _cg; } @@ -1247,7 +1248,11 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I } } if(!constructorVorhanden){//Falls kein Konstruktor vorhanden ist, muss noch der Standardkonstruktor angefügt werden: + Block konstruktorBlock = new Block(); + konstruktorBlock.statements.add(new SuperCall(konstruktorBlock)); + //Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(konstruktorBlock,this.getName().toString(), this)); Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(this.getName().toString(), this)); + this.addField(standardKonstruktor); } diff --git a/src/de/dhbwstuttgart/syntaxtree/Constructor.java b/src/de/dhbwstuttgart/syntaxtree/Constructor.java index 0635bdbd..e56619a7 100644 --- a/src/de/dhbwstuttgart/syntaxtree/Constructor.java +++ b/src/de/dhbwstuttgart/syntaxtree/Constructor.java @@ -58,19 +58,19 @@ public class Constructor extends Method { InstructionList il = new InstructionList(); //sollte nicht new sein sondern aus Block kommen Class parentClass = this.getParentClass(); - //Hier müsste drin stehen: Kreiere einen Block, welcher ein Statement enthält, welches ein Super Statement ist. + //Hier m�sste drin stehen: Kreiere einen Block, welcher ein Statement enth�lt, welches ein Super Statement ist. //TODO: Alles dynamisch gestalten //init darf nur drin stehen, wenn Konstruktor; methode.method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.getReturnType(methode.getType().get_Name()), org.apache.bcel.generic.Type.NO_ARGS , new String[] { }, "", parentClass.name, il, _cp); - methode.genByteCode(cg); //Aufrufen um Iteration über Block zu starten + methode.genByteCode(cg); //Aufrufen um Iteration �ber Block zu starten } // super statement muss drin sein // stmt genByteCode + im block genByteCode implementieren & dann Hierarchie ausprobieren // de.dhbw.systanxtree.stmts supercall - // Aufrufhierarchie: Class->Felder->Konstruktor->Methode innerhalb Konstruktor->Block->Statements (in diesem Fall nur super())->hier wird bytecode für superaufruf generiert + // Aufrufhierarchie: Class->Felder->Konstruktor->Methode innerhalb Konstruktor->Block->Statements (in diesem Fall nur super())->hier wird bytecode f�r superaufruf generiert @@ -316,7 +316,6 @@ public class Constructor extends Method { @Override public void set_Method_Name(String string) { - this.methode.set_Method_Name(string); } diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index 796bb800..dd27c698 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -705,7 +705,11 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // Methode und Block teilen sich einen ReturnType: return this.returntype; } - + public static Method createEmptyMethod(Block withBlock, String withSignature, Class parent) { + Method ret = Method.createEmptyMethod(withSignature, parent); + ret.set_Block(withBlock); + return ret; + } public static Method createEmptyMethod(String withSignature, Class parent) { Method ret = new Method(0); DeclId DImethod = new DeclId(); @@ -745,7 +749,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable //oben steht MethodGen method als Variable (Z. 71) - // Über Statements iterieren um Block abzurufen + // �ber Statements iterieren um Block abzurufen for (Statement statements : block.get_Statement()) { statements.genByteCode(cg); }